package compilador.lexico;

import java.util.List;

public class LexemaGeneral extends Lexema {

	@Override
	public Token calcular(TablaSimbolos tablaSimbolos, int numeroLinea, List<Error> errores) {
		
		if ((cadena.charAt(0)=='*')||(cadena.charAt(0)=='+')||(cadena.charAt(0)=='-')||(cadena.charAt(0) =='/')){
			token.setID("Op. Aritmetico");token.setValor(cadena);
		}
		else if (cadena.charAt(0)=='{'){
			token.setID("Llave abierta");token.setValor(cadena);
		}
		else if (cadena.charAt(0)=='}'){
			token.setID("Llave cerrada");token.setValor(cadena);
		}
		else if (cadena.charAt(0)=='['){
			token.setID("Corchete abierto");token.setValor(cadena);
		}
		else if (cadena.charAt(0)==']'){
			token.setID("Corchete cerrado");token.setValor(cadena);
		}
		else if (cadena.charAt(0)=='('){
			token.setID("Parentesis abierto");token.setValor(cadena);
		}
		else if (cadena.charAt(0)==')'){
			token.setID("Parentesis cerrado");token.setValor(cadena);
		}
		else if (cadena.charAt(0)==','){
			token.setID("Coma");token.setValor(cadena);
		}
		else if (cadena.charAt(0)==';'){
			token.setID("Punto y Coma");token.setValor(cadena);
		}
		else if (cadena.length()>1){ 
					if ((cadena.charAt(1) == '=')&&(cadena.charAt(0) == ':')){
						token.setID("Asignacion");token.setValor(cadena);
					}else if ((cadena.charAt(1)=='.')&&(cadena.charAt(0)=='.')){
						token.setID("Puntos consecutivos");token.setValor(cadena);
					}else if ((cadena.charAt(0)=='>')&&(cadena.charAt(1) == '=')){
						token.setID("Op. Relacional");token.setValor(cadena);
					}else if ((cadena.charAt(0)=='<')&&(cadena.charAt(1) == '=')){
						token.setID("Op. Relacional");token.setValor(cadena);
					}else if ((cadena.charAt(cadena.length()-1) == '\'')){
							token.setID("Cadena");token.setValor(cadena.substring(1, cadena.length()-1));
					}else if ((cadena.charAt(0) == '\'')){
						Error e = new Error(Error.ERROR_CADENA_INVALIDA,numeroLinea,cadena);
						errores.add(e);
						token.setID("");
					}else if ((cadena.charAt(0)=='<')&&(cadena.charAt(1) == '>')){
						token.setID("Op. Relacional");token.setValor(cadena);
					}else return token;
		}
		else if (cadena.charAt(0)=='='){
			token.setID("Op. Relacional");token.setValor(cadena);
		}else if (cadena.charAt(0)=='>'){
			token.setID("Op. Relacional");token.setValor(cadena);
		}else if (cadena.charAt(0)=='<'){
			token.setID("Op. Relacional");token.setValor(cadena);
		}else
			return token;
		
		return token;
		}
	
		

}
